package map;

import java.util.HashMap;
import java.util.Map;

/**
 * Map接口:
 * 1.所有双列集合的顶级接口，规则了所有双列集合的共有功能
 * 2.Map体现的结果是一个多行两列的表格，其中左列称为key键，右列称为value值
 *   Map总是成对保存数据，每一对称为一个"Entry"条目，并且总是根据key获取对应的value
 * 3.Map要求:key不允许重复，但value可以重复--重复与否的判断依据为equals()+hashCode()
 * 4.常用实现类:
 *   1)HashMap:不重复、无下标、无序(存取顺序不一致)
 *   2)LinkedHashMap:不重复、无下标、有序(存储/访问顺序有序)
 */
public class MapDemo1 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        /*
          put(K k,V v):向map中添加一组键值对
          Map要求key不能重复，如果使用重复的key存入value时实际是做替换value的操作
          同时将被替换的value通过返回值返回了
          如果是第一次存入，则返回值为null
         */
        map.put("语文",99);
        map.put("数学",100);
        map.put("英语",88);
        map.put("物理",96);
        map.put("化学",99);
        System.out.println(map); //{物理=96, 数学=100, 化学=99, 语文=99, 英语=88}

        map.put("物理",100); //将key物理对应的值替换为100-----常规操作
        System.out.println(map); //{物理=100, 数学=100, 化学=99, 语文=99, 英语=88}
        Integer value = map.put("物理",50); //将key物理对应的值替换为50，同时将100返回
        System.out.println(value); //100
        System.out.println(map); //{物理=50, 数学=100, 化学=99, 语文=99, 英语=88}

        value = map.put("政治",99); //若不是替换操作则返回null
        System.out.println(value); //null
        System.out.println(map); //{政治=99, 物理=50, 数学=100, 化学=99, 语文=99, 英语=88}
    }
}
